﻿namespace wwl.Contract.Interfaces.MultiTenancy
{
  /// <summary>
  /// 租户上下文接口。
  /// 提供对当前操作的租户信息的访问，是多租户功能的核心服务接口。
  /// </summary>
  public interface ITenantContext
  {
    /// <summary>
    /// 获取当前租户的唯一标识。
    /// </summary>
    /// <returns>当前租户ID，如果是系统管理员或无租户上下文则返回 null。</returns>
    string? TenantId { get; }

    /// <summary>
    /// 判断当前操作用户是否为系统管理员。
    /// 系统管理员拥有跨租户访问所有数据的权限。
    /// </summary>
    /// <returns>如果是系统管理员则为 true，否则为 false。</returns>
    bool IsSystemAdmin { get; }

    /// <summary>
    /// 确保当前操作在一个有效的租户范围内。
    /// 如果当前上下文没有租户ID且不是系统管理员，此方法将抛出异常。
    /// 用于在业务逻辑中强制要求租户上下文。
    /// </summary>
    /// <exception cref="InvalidOperationException">当操作不在有效租户范围内时抛出。</exception>
    void EnsureTenantScope();
  }
}